/**
 * 
 */
package logica.clases;

import logica.colecciones.PaisesAsignados;
import logica.datatypes.Jugador.DataJugador_R1;
import logica.datatypes.Jugador.DataJugador_R5;
import logica.datatypes.Jugador.DataJugador_R11;
import logica.datatypes.Jugador.DataJugador_R17;
import logica.datatypes.Pais.DataPais_R11;
import java.io.Serializable;
import java.util.ArrayList;
import java.awt.*;	

/**
 * Jugador contiene los datos de la realidad para representar un jugador participe del juego
 * 
 */
public class Jugador implements Serializable{

	private int numero;
	private String nombre;
	private Color color;
	private int cantFichasDisp;
	private boolean enTurno;
	private PaisesAsignados paisesAsignados; 
	private boolean logueado;
	private final static long serialVersionUID = 1;
	
	public Jugador(int numero, String nombre, Color color) {	
		this.numero = numero;
		this.nombre = nombre;
		this.color = color;
		this.cantFichasDisp = 0;
		this.enTurno = false;
		this.logueado = false;
		paisesAsignados = new PaisesAsignados();
	}

	public int getNumero() {
		return numero;
	}
	
	public void setNumero(int numero) {
		this.numero = numero;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public boolean getLogueado() {
		return logueado;
	}

	public void setLogueado(boolean logueado) {
		this.logueado = logueado;
	}
	
	public Color getColor() {
		return color;
	}

	public void setColor(Color color) {
		this.color = color;
	}

	public int getCantFichasDisp() {
		return cantFichasDisp;
	}

	public void setCantFichasDisp(int cantFichasDisp) {
		this.cantFichasDisp = cantFichasDisp;
	}

	public boolean isEnTurno() {
		return enTurno;
	}

	public void setEnTurno(boolean enTurno) {
		this.enTurno = enTurno;
	}

	public PaisesAsignados getPaisesAsignados() {
		return paisesAsignados;
	}

	public void setPaisesAsignados(PaisesAsignados paisesAsignados) {
		this.paisesAsignados = paisesAsignados;
	}

	//Calcula la cantidad de fichas que tendra disponibles el jugador  
	//dependiendo de la cantidad de paises que posea
	public int calculoCantFichas(){		
		int cant, aux;
		aux = paisesAsignados.cantPaises();
		cant = aux / 2;
		if (aux%2 != 0)
			cant++;
		return cant;		
	}
	
	public void quitarPais(int numero){
		paisesAsignados.borrarPais(numero);
	}
	
	public void agregarPais(Pais pais){	
		paisesAsignados.insertar(pais);
	}
	
	public int cantPaises(){
		return paisesAsignados.cantPaises();
	}
	
	public DataJugador_R1 toDataJugador_R1(){
		DataJugador_R1 data = new DataJugador_R1(nombre,color);
		return data;
	}
	
	public DataJugador_R5 toDataJugador_R5(){
		DataJugador_R5 data = new DataJugador_R5(nombre);
		return data;
	}
	
	public DataJugador_R11 toDataJugador_R11(){
		DataPais_R11[] dataPais_R11;
		dataPais_R11 = paisesAsignados.cargaDataPaises();
		DataJugador_R11 data = new DataJugador_R11(nombre,color,cantFichasDisp,dataPais_R11);
		return data;
	}
	
	public DataJugador_R17 toDataJugador_R17(){
        //Convierte los valores del color en enteros	
		String R=Integer.toHexString(color.getRed()).toUpperCase();		
		String G=Integer.toHexString(color.getGreen()).toUpperCase();		
		String B=Integer.toHexString(color.getBlue()).toUpperCase();		
		if (R.length()<2)			
			R="0"+R;		
		if (G.length()<2)			
			G="0"+G;		
		if (B.length()<2)			
			B="0"+B; 		
		String col = "#"+R+G+B;
		
		DataJugador_R17 data = new DataJugador_R17(numero,nombre,col,cantFichasDisp,cantPaises());		
		return data;
	}
	
	public void quitarCantFichas(int cantFichas){
		cantFichasDisp = cantFichasDisp - cantFichas;
	}
	
	public boolean existePais(String nomPais){
		return paisesAsignados.existePais(nomPais);
	}
	
	public ArrayList<Integer> codPaisesAsig(){
		return paisesAsignados.codPaisesAsig();
	}
}
